#ifndef RESPONSE_STORAGE_IMAGE_H_INCLUDED
#define RESPONSE_STORAGE_IMAGE_H_INCLUDED

/**
* @file response_storage_image.h
*
*	 Nel file response_storage_image.h viene definita la classe che gestisce la 
*	 comunicazione tra il Service Provider che offre il servizio di Storage_Image ed il 
*	 Client
*	
* @author Favale Angelo
* @author Fagioli Alessio
*
* @version 1.0
*/

#include "libreria.h"
/**
* @class Response_Storage_Image
*
*	 La classe Response_Storage_Image gestisce la comunicazione tra il Service Provider 
*	 ed il client che vuole richiedere il servizio di Storage_Image.
*/
class Response_Storage_Image
{
	private:
		char name[BUFFER_SIZE];	/**< Nome del Servizio (Storage_Image)	  	   */
		host entita;		/**< Mantiene informazioni sull'entità con cui deve
					*    scambiare informazioni			   */
	public:
		/**
		* Il costrutture carica le informazioni riguardanti l'entità con cui deve 
		* comunicare
		*/
		Response_Storage_Image(host peer);

		/**
		* @param nome_file Nome dell'immagine da inviare al Service Provider
		*
		* @return true se l'immagine è stata inviata correttamente al Service 
		*	  Provider, false altrimenti
		*
		* Questo metodo consente al client di inviare al Service Provider l'immagine
		* chiamata nome_file
		*/
		bool send_image (char * nome_file);

		/**
		* @param buf Messaggio da decodificare
		* @param nome_file Nome dell'immagine ritornata per riferimento
		* @param lunghezza_file Dimensione dell'immagine ritornata per riferimento
		*
		* @return true se la decodifica del messaggio è andata a buon fine, false 
		*	  altrimenti
		*
		* Questo metodo permette al Service Provider di decodificare il messaggio 
		* inviato dal client.
		* In particolare vengono estratte le informazioni sul nome dell'immagine che
		* si deve ricevere e sulla sua dimensione
		*/
		bool decode_request( char buf[], char nome_file[], char lunghezza_file[] );

		/**
		* @param file Nome dell'immagine che il client vuole inviare
		*
		* @return true se il messaggio contenente il nome dell'immagine è stato
		*	  inviato correttamente al Service Provider, false altrimenti
		*
		* Questo metodo permette al client di inviare al Service Provider la
		* richiesta per memorizza presso di lui l'immagine voluta
		*/
		bool code_request(char *);

		/**
		* @param verify Indica se il client può inviare l'immagine
		*
		* Questo metodo permette al Service Provider di far sapere al client se può 
		* inviargli l'immagine richiesta.
		* Nel caso in cui verify vale true allora il client riceverà il consenso, 
		* altrimenti no
		*/	
		void code_response(bool verify);

		/**
		* @return true se il client ha ottenuto il consenso per inviare l'immagine al
		*	  Service Provider, false altrimenti
		*
		* Questo metodo permette al client di capire se il Service Provider è
		* disponibile a ricevere l'immagine richiesta
		*/
		bool decode_response();
} ;

#endif
